package com.chat.admin.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.chat.admin.domain.DTO.ADD.AddUserDTO;
import com.chat.admin.domain.DTO.DisableAccountDTO;
import com.chat.admin.domain.DTO.EDIT.EditUserDTO;
import com.chat.admin.domain.DTO.UserAppealDTO;
import com.chat.admin.domain.DTO.UserDTO;
import com.chat.admin.domain.DTO.UserFeedbackDTO;
import com.chat.admin.domain.VO.UserAppealVO;
import com.chat.admin.domain.VO.UserFeedbackVO;
import com.chat.admin.domain.VO.UserVO;
import com.chat.admin.domain.pojo.UserExcelEnter;
import com.chat.common.entity.User;
import com.chat.common.entity.UserAppeal;
import com.chat.common.form.ListForm;
import com.chat.common.vo.R;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

public interface UserManagementService extends IService<User> {
    /**
     * 获取全部用户
     * @return
     */
    R<ListForm<UserVO>> getUserList(Integer page, Integer size);

    /**
     * 根据条件获取用户信息
     * @param userDTO
     * @return
     */
    R<ListForm<UserVO>> getUserList(UserDTO userDTO);

    /**
     * 禁用账号
     * @param disableAccountDTO
     * @return
     */
    R DisableAccount(DisableAccountDTO disableAccountDTO);

    /**
     * 启用账号
     * @param userID
     * @return
     */
    R EnableAccount(Long userID);

    /**
     * 修改用户信息
     * @param editUserDTO
     * @return
     */
    R<UserVO> EditUserInfo(EditUserDTO editUserDTO);

    /**
     * 添加一个用户账号
     * @param addUserDTO
     * @return
     */
    R addOneUserAccount(AddUserDTO addUserDTO);

    /**
     * 读入批量用户账号
     * @param file
     * @return
     */
    R<?> addExcelUserAccount(MultipartFile file);

    /**
     * 用于将List<UserExcelEnter>转成List<User>
     * @param DataList
     */
    void convertToUsers(List<UserExcelEnter> DataList);

    /**
     * 获取全部的申请理由
     * @return
     */
    R<ListForm<UserAppealVO>> getUserApplication(UserAppealDTO userAppealDTO);

    /**
     * 同意用户申请
     * @param applyID
     * @return
     */
    R agreeUserApplication(String applyID);

    /**
     * 拒绝用户申请
     * @param applyID
     * @return
     */
    R refuseUserApplication(String applyID);

    /**
     * 根据账号获取用户信息
     * @param Account
     * @return
     */
    User getUserByAccount(String Account);

    /**
     * 获取用户反馈
     * @param userFeedbackDTO
     * @return
     */
    R<ListForm<UserFeedbackVO>> getUserFeedback(UserFeedbackDTO userFeedbackDTO);

    /**
     * 审批用户反馈
     * @param ID
     * @return
     */
    R HandleUserFeedback(String ID);
}
